import java.util.Deque;
import java.util.LinkedList;

public class Num2460 {
//    public int[] applyOperations(int[] nums) {
//        int n = nums.length;
//        for (int i = 0; i < n - 1; i++) {
//            if (nums[i] == nums[i + 1]) {
//                nums[i] *= 2;
//                nums[i + 1] = 0;
//            }
//        }
//        int i = n - 1;
//        int count = 0;
//        while (i >= 0 && nums[i] == 0) {
//            i--;
//            count++;
//        }
//        while (i >= 0) {
//            if(nums[i] != 0) {
//                i--;
//                continue;
//            }
//            for (int k = i; k < n - 1; k++) {
//                nums[k] = nums[k + 1];
//            }
//            count++;
//            i--;
//        }
//        for (int k = n - 1; k >= n - count; k--) {
//            nums[k] = 0;
//        }
//        return nums;
//    }

//    public int[] applyOperations(int[] nums) {
//        int n = nums.length;
//        for (int i = 0; i < n - 1; i++) {
//            if (nums[i] == nums[i + 1]) {
//                nums[i] *= 2;
//                nums[i + 1] = 0;
//            }
//        }
//        Deque<Integer> stack1 = new LinkedList();
//        Deque<Integer> stack2 = new LinkedList();
//        for (int i = 0; i < n; i++) {
//            stack1.push(nums[i]);
//        }
//        while (!stack1.isEmpty()) {
//            if (stack1.peek() == 0) {
//                stack1.pop();
//            }else {
//                stack2.push(stack1.pop());
//            }
//        }
//        for (int i = 0; i < n; i++) {
//            if (!stack2.isEmpty()) {
//                nums[i] = stack2.pop();
//            }else {
//                nums[i] = 0;
//            }
//        }
//        return nums;
//    }

    public int[] applyOperations(int[] nums) {
        int n = nums.length;
        for (int i = 0; i < n - 1; i++) {
            if (nums[i] == nums[i + 1]) {
                nums[i] *= 2;
                nums[i + 1] = 0;
            }
        }
        int index = 0;
        for (int i = 0; i < n; i++) {
            if (nums[i] != 0) {
                if (i != index) {
                    nums[index] = nums[i];
                    nums[i] = 0;
                }
                index++;
            }
        }
        return nums;
    }
}
